package com.sinosoft.ebusiness.service.impl;

import java.io.Serializable;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sinosoft.ebusiness.domain.elementManage.GeTemplate;
import com.sinosoft.ebusiness.service.TemplateService;
import com.sinosoft.ebusiness.service.repo.GeTemplateRepository;

import ins.framework.dao.GenericDaoHibernate;

@Service("templateService")
@Transactional
public class TemplateServiceSpringImpl  extends 
GenericDaoHibernate<GeTemplate, Serializable> implements TemplateService {

	@Autowired
	private GeTemplateRepository geTemplateRepository;
	
	@Override
	public void addTemplate(GeTemplate template) {
		getHibernateTemplate().save(template);
	}

	@Override
	public GeTemplate queryByPk(String templateCode) {
		return getHibernateTemplate().get(GeTemplate.class, templateCode);
	}

	@Override
	public Page queryGeTemplateList(GeTemplate template,int pageNo, int pageSize,String flag) {
		
		/*QueryRule queryRule = QueryRule.getInstance();
		if(template !=null){
			if(template.getTemplatecode()!=null&&!"".equals(template.getTemplatecode().trim())){
				queryRule.addLike("templatecode","%"+template.getTemplatecode().trim()+"%");
			}
			if(template.getTemplatecname()!=null&&!"".equals(template.getTemplatecname().trim())){
				queryRule.addLike("templatecname", "%"+template.getTemplatecname().trim()+"%");
			}
			if(template.getTemplateename()!=null&&!"".equals(template.getTemplateename().trim())){
				queryRule.addLike("templateename", "%"+template.getTemplateename().trim()+"%");
			}
			if(template.getTemplatetname()!=null&&!"".equals(template.getTemplatetname().trim())){
				queryRule.addLike("templatetname", "%"+template.getTemplatetname().trim()+"%");
			}
			if(template.getRiskClass()!=null&&!"".equals(template.getRiskClass().trim())){
				queryRule.addEqual("riskClass",template.getRiskClass().trim());
			}
		}
		
		Page page = super.find(GeTemplate.class ,queryRule, pageNo, pageSize);*/
		
		
		Page page = this.geTemplateRepository.findAll(new Specification<GeTemplate>() {

			@Override
			public Predicate toPredicate(Root<GeTemplate> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
				if(flag!=null&&!"".equals(flag.trim())&&flag.equals("productgetTemplate")){
					query.where(cb.equal(root.<String>get("status"), "0"));
				}
				if(template.getTemplatecode()!=null&&!"".equals(template.getTemplatecode().trim())){
					query.where(cb.like(root.<String>get("templatecode"), "%"+template.getTemplatecode().trim()+"%"));
				}
				if(template.getTemplatecname()!=null&&!"".equals(template.getTemplatecname().trim())){
					query.where(cb.like(root.<String>get("templatecname"), "%"+template.getTemplatecname().trim()+"%"));
				}
				if(template.getTemplateename()!=null&&!"".equals(template.getTemplateename().trim())){
					query.where(cb.like(root.<String>get("templateename"), "%"+template.getTemplateename().trim()+"%"));
				}
				if(template.getTemplatetname()!=null&&!"".equals(template.getTemplatetname().trim())){
					query.where(cb.like(root.<String>get("templatetname"), "%"+template.getTemplatetname().trim()+"%"));
				}
				if(template.getRiskClass()!=null&&!"".equals(template.getRiskClass().trim())){
					query.where(cb.like(root.<String>get("riskClass"), "%"+template.getRiskClass().trim()+"%"));
				}
				return null;
			}
			
			
		},new PageRequest((pageNo-1), pageSize));
		
		
		return page;
	}
	
	

	@Override
	public void updateTemplate(GeTemplate template) {
		GeTemplate db = queryByPk(template.getTemplatecode());
		getHibernateTemplate().deleteAll(db.getGeTemplateGroups());
		db.setGeTemplateGroups(null);
		super.flush();
		super.clear();
		getHibernateTemplate().saveOrUpdate(template);
	}

	@Override
	public void deleteGeTemplateByPk(String templateCode) {
		GeTemplate template = getHibernateTemplate().get(GeTemplate.class, templateCode);
		getHibernateTemplate().delete(template);
	}

	

}
